#ifndef MY_PROJECT_H_
#define MY_PROJECT_H_
/*
 * Global.h
 *
 *  Created on: Mar 26, 2013
 *      Author: drewlewis
 */

#include <tiled_array.h>
#include <Eigen/Dense>
#include <vector>
#include <chemistry/qc/basis/integral.h>
#include "integrals/range.hpp"
#include "integrals/tensor.hpp"

namespace TA = TiledArray;

typedef Eigen::MatrixXd Matrix;             // eigen Matrix
typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic,
    Eigen::RowMajor> MatrixRM;              // Eigen row major matrix
typedef Eigen::Vector3d Vector3;            // Eigen vector of 3

typedef mpqc::tensor<double,2> Tensor2;     // Rank 2 mpqc tensor
typedef mpqc::tensor<double,3> Tensor3;     // Rank 3 mpqc tensor
typedef mpqc::tensor<double,4> Tensor4;     // Rank 4 mpqc tensor
typedef sc::Ref<sc::GaussianBasisSet> Basis;
typedef std::vector< Basis> Bases;

typedef TiledArray::Array<double,2> ARRAY2; // rank 2 TA tensor
typedef TiledArray::Array<double,3> ARRAY3; // rank 3 TA tensor
typedef TiledArray::Array<double,4> ARRAY4; // rank 4 TA tensor
typedef TA::TiledRange1 TRange1;            // TA Tiled range 1 for making tiles
typedef ARRAY2::value_type Tile2;           // rank 2 TA tile
typedef ARRAY3::value_type Tile3;           // rank 3 TA tile
typedef ARRAY4::value_type Tile4;           // rank 4 TA tile

typedef std::pair<std::size_t, std::size_t > atom_range; // first and last atom in range
typedef std::vector< atom_range > cluster_atoms; // each pair gives the first and last atom in a cluster.

typedef std::vector<int> shell_list;



#endif /* MY_PROJECT_H_ */
